﻿using System;
using System.Globalization;
using Business.Entity.Contabil.Pessoa;
using Business.Entity.Contabil.Pessoa.SubClass.Usuario;
using Business.Entity.Contabil.Pessoa.SubClass.Usuario.ClassesRelacionadas;
using Business.Entity.Estoque.Produto;
using Business.Entity.Estoque.Produto.ClassesRelacionadas;
using Business.Enum;
using NHibernate;

namespace Business.InformacoesIniciais
{
    class DadosDemonstracao
    {
        public static void GravarDadosDemonstracao(ISession session)
        {
            var t = session.BeginTransaction();
            try
            {
                var u = DadosIniciaiEstoque.UnidadesMedida[0];
                var g = new GrupoProduto();
                var sG = new SubGrupoProduto();

                

                // Grava um grupo para testes.
                g.Descricao = "Grupo teste";
                session.Save(g);

                // Grava um subgrupo para testes.
                sG.Descricao = "Subgrupo teste";
                sG.Grupo = g;
                session.Save(sG);
                GravarProdutos(session, u, sG);
                CriaUsuarios(session);
            }
            catch (Exception)
            {

                throw;
            }

        }

        private static void CriaUsuarios(ISession session)
        {
            foreach (var perfil in DadosIniciaisPerfil.ListPerfil)
            {
                var pessoa = new Pessoa()
                {
                    Nome = perfil.Nome
                };
                session.Save(pessoa);
                var usuario = new Usuario()
                {
                    Login = perfil.Nome.ToLower().Substring(0,3),
                    Senha = new Criptografia.CriptHash().GetHash("1"),
                    TipoUsuario = TipoUsuario.Administrador,
                    Pessoa = pessoa,
                    UsaLocadora = true,
                    UsaRetaguarda = true,
                    UsaVendaMercearia = true,
                    UsaVendaRestaurante = true
                };
                foreach (var permissaoForm in perfil.PermissoesFormulario)
                {
                    var permissao = new PermissaoForm()
                    {
                        Formulario = permissaoForm.Formulario,
                        PermissaoAcesso = permissaoForm.PermissaoAcesso,
                        PermissaoDelete = permissaoForm.PermissaoDelete,
                        PermissaoInsert = permissaoForm.PermissaoInsert,
                        PermissaoSelect = permissaoForm.PermissaoSelect,
                        PermissaoUpdate = permissaoForm.PermissaoUpdate
                    };
                    usuario.PermissoesFormulario.Add(permissao);
                }
                foreach (var permissaoRelatorio in perfil.PermissoesRelatorio)
                {
                    var permissao = new PermissaoRelatorio()
                    {
                        Relatorio = permissaoRelatorio.Relatorio,
                        Habilitado = permissaoRelatorio.Habilitado
                    };
                    usuario.PermissoesRelatorio.Add(permissao);
                }
                session.Save(usuario);
            }
        }

        private static void GravarProdutos(ISession session, Unidade unidade, SubGrupoProduto sG)
        {
            for (int i = 0; i < 100; i++)
            {
                var p = new Produto
                {
                    TemReceita = false,
                    Descricao = "Produto " + i,
                    CodBarra = i.ToString(CultureInfo.InvariantCulture),
                    Referencia = i.ToString(CultureInfo.InvariantCulture),
                    PrecoVenda = new Random(1000).Next(10, 100),
                    UnidadeCompra = unidade,
                    UnidadeVenda = unidade,
                    SubGrupo = sG,
                    NCM = DadosIniciaisNcm.NcmPadraoProduto
                };
                session.Save(p);
            }
        }
    }
}
